## dict字典（可变序列）

'''
字典特点：
    1.字典中所有元素都是key-value 键值对组成； key不允许重复，value可以重复；
    2.字典中的元素是无序的；
    3.字典中key必须是不可变对象；
    4.字典可以根据需要动态扩展大小；
'''

# ●字典创建
student1 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
print('字典创建方式1：', student1)

student2 = dict(id=2, name='张三', age=22, sex='男')
print('字典创建方式2：', student2)

student3 = {}
print('创建空字典dict：', student3)


# ●获取字典中的元素
student4 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
print('获取字典中的元素方式1：', student4['name'])
print('获取字典中的元素方式2：', student4.get('name'))

# student4['address'] 方式1： 获取不存在的key 会报错！！！
# print('使用方式1 获取不存在的key：', student4['address'])  KeyError: 'address'

# student4.get('address') 方式2：获取不存在的key 返回：None
print('使用方式2 获取不存在的key：', student4.get('address'))

# 需求：获取的key不存在，返回一个默认值。
print('获取的key不存在，返回一个默认值：', student4.get('address', '无'))


# ●字典Key的判断
student5 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
f1 = 'id' in student5
print('key[id]在字典中存在True 否则False：', f1)
f2 = 'address' not in student5
print('key[address]在字典中是不存在 True，否则False：', f2)


# ●字典删除指定key-value
del student5['id']
# clear() 清空字典中的所有元素；
student5.clear()


# ●字典新增元素
student6 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
student6['address'] = '刻录机阿斯利康大家分厘卡是否'
print(student6)


# ●字典生成表达式: {变量key, 变量value for 循环item in zip(列表, 列表)}
keyList = ['one','two','three', 'four']
valList = [1, 2, 3]
createDict = { key:val for key, val in zip(keyList, valList)}
print(createDict)


# ●字典修改元素
student6['address'] = 'abcabcabac'
print(student6)


# ●字典获取所有的key
student7 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
gainKeys = student7.keys()
print('获取字典中所有的key：', list(gainKeys))

# ●字典获取所有的value
student8 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
gainValues = student8.values()
print('获取字典中所有的values：', list(gainValues))


# ●字典获取所有的key-value
student9 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
gainKeyValues = student9.items()
print('获取字典中所有的key-value：', list(gainKeyValues)) # 注意转后是元组数据类型

# ●字典元素遍历
student10 = {'id':1, 'name':'丽丽', 'age':23, 'sex':'女'}
for item in student10:
    print('获取循环中的key：', item, '---  获取循环中的value', student10[item])
    print('获取循环中的value方式二：', student10.get(item))
